#pragma once

#include "ConductorPrueba.h"
#include "ISistema.h"
#include "Prueba.h"
#include "Puntero.h"

class CasoDePrueba : public Prueba
{
public:
	CasoDePrueba();
	virtual ~CasoDePrueba();

protected:
	virtual void CorrerPruebaConcreta();
	virtual Cadena GetNombre() const;

private:
	Puntero<ISistema> interfaz;

	template <class T>
	void Verificar(Puntero<Iterador<Puntero<T>>> obtenidos, Puntero<Iterador<Puntero<T>>> esperados, Cadena comentarioFalta, Cadena comentarioSobra);

	void Verificar(pPais obtenido, pPais esperado, Cadena comentario = "Se obtuvo el pais {0} y se esperaba {1}");
	void Verificar(pCiudad obtenido, pCiudad esperado, Cadena comentario = "Se obtuvo la ciudad {0} y se esperaba {1}");
};
